close all; clear; clc;
I = imread('rice.png');% 读取图像

horiSobel = [-1 0 1; -2 0 2; -1 0 1]; % 水平方向Sobel算子
vertSobel = [-1 -2 -1; 0 0 0; 1 2 1]; % 垂直方向Sobel算子

% 应用imfilter进行卷积运算，分别得到水平和垂直方向的梯度
Gx = imfilter(double(I), horiSobel, 'replicate');
Gy = imfilter(double(I), vertSobel, 'replicate');
Gradient_A = sqrt(Gx.^2 + Gy.^2);% 计算梯度幅度

% 转换梯度幅度为uint8以适合显示
Gradient_A = mat2gray(Gradient_A) * 255;
Gradient_A = uint8(Gradient_A);

%% 显示原图和梯度图像
subplot(1, 2, 1); % 1行2列，第一个位置
imshow(I);title('原始图像');

subplot(1, 2, 2); % 1行2列，第二个位置
imshow(Gradient_A);title('梯度图像');